package com.hyt.it.ogt.kq.service.gov.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.service.gov.model.dto.arrange.TimeSubjectCandidateDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.arrange.TimeSubjectDTO;
import com.hyt.it.ogt.kq.service.gov.model.entity.TimeSubject;
import com.hyt.it.ogt.kq.service.gov.roomdata.model.gce.GceSubject;
import com.hyt.it.ogt.kq.service.gov.roomdata.model.obt.ObtSubject;
import com.hyt.it.ogt.kq.service.model.entity.Subject;

/**
 * <p>
 * 批次科目表 服务类
 * </p>
 *
 * @author huangyh
 * @since 2021-03-08
 */
public interface ITimeSubjectService extends IService<TimeSubject> {

    /**
     * 查询科目是否已经绑定批次
     * @param taskId
     * @param subjectId
     * @return
     */
    boolean isTimeSubjectBinding(String taskId, String subjectId);


    /**
     * 查询科目编号是否存在
     * @param taskId
     * @param
     * @return
     */
    boolean isCodeIsExists(String taskId, Subject subject);

    /**
     * 查询科目是否已经绑定批次subjectIds
     * @param taskId
     * @param subjectIds
     * @return
     */
    String haveTimeSubjectBinding(String taskId, String subjectIds);

    /**
     * 通过考试任务id获取批次科目数据
     * @param taskId 考试任务id
     * @return 批次科目数据
     */
    List<TimeSubject> listByTaskId(String taskId);

    /**
     * 科目信息
     * @param taskId
     * @param timeId
     * @return
     */
    List<ObtSubject> getTimeSubjectList(String taskId, String timeId);

    /**
     * 获取GCE考务包的科目信息，用于生成考务包
     * @param taskId 考试任务id
     * @param timeId 批次id
     * @return GCE考务包的科目信息
     */
    List<GceSubject> getGceSubjectList(String taskId, String timeId);

    /**
     * 查询科目id
     * @param taskId
     * @return
     */
    List<String> selectSubjectIds(String taskId);

    /**
     * 计算批次科目数量
     * @param taskId 考试任务id
     * @return 批次科目数量
     */
    Integer countTimeSubject(String taskId);

    /**
     * 获取批次科目数据-map
     * @param taskId
     * @return
     */
    Map<String,String> getTimeSubjectMap(String taskId);

    /**
     * 获取批次科目DTO
     * @param taskId 考试任务id
     * @return 批次科目DTO
     */
    List<TimeSubjectCandidateDTO> getTimeSubjectCandidateDTO(String taskId);

    /**
     * 验证科目是否存在
     * @param taskId
     * @param subject
     * @param timeId
     * @return
     */
    Boolean existTimeSubject(String taskId, String subject, String timeId);

    /**
     * 考试任务下是否存在指定id的批次科目
     * @param taskId 考试任务id
     * @param timeId 批次id
     * @param subjectId 科目id
     * @return true：存在，false：不存在
     */
    boolean hasTimeSubject(String taskId, String timeId, String subjectId);

    /**
     * 获取批次科目DTO
     * @param taskId 考试任务id
     * @return 批次科目DTO
     */
    List<TimeSubjectDTO> getTimeSubjectDTO(String taskId);

    Map<String, String> getSubjectMap(String taskId);

    int countByTime(String taskId, String id);

    int countSubjectByTime(String taskId);
}
